#include <iostream>
#include <string>
using namespace std;


class foo  
{
private:
    std::string name_;
    unsigned int age_;
public:
	foo(const unsigned long age) :
        name_("Rong"),
        age_(age)
    {
     }

	foo(const std::string& name = "", const unsigned int age = 0) :
        name_(name),
        age_(age)
    {
     }


	void print(){
	cout << name_ << " is " << age_ << endl;
	}

};

int main(){
		foo rong, Rong(18L);
		rong.print();
		Rong.print();

		return 0;
}

// ./a.out
// Rong is 18
//  Rong is 18

// definition will not complain ambigous, but when initializing, the problem arises.
// the proto of a function is the one will full 
// the default argument can be assign at the place of implementation
